<?php

/**
 * Description of Util
 *
 * @author polacseka
 */
class XQL_Util
{

	/**
	 * A kapott asszociatív tömböt mezőnév kulcs és érték párokba rendezett
	 * formából "ÉS" kapcsolatú SQL szűrővé alakítja.
	 *
	 * @param array $filters
	 * @param string $connectionAlias
	 * @return XQL_Expression
	 */
	public static function argumentToFilter($filters, $connectionAlias='default')
	{
		$result = new XQL_Expression();
		if (is_array($filters) and count($filters) > 0)
		{
			$value = array();
			$filtersCount = count($filters);
			$counter = 0;
			foreach ($filters as $k=>$v)
			{
				if (strpos($k, '`')===0) $k = substr($k, 1, -1);
				$value[] = XQL_Expression::create()->set(
					XQL_Field::create()->set($k),
					XQL_Operator::create()->equals(
						XQL_String::create()->set($v)
					)
				);
				if ($counter < $filtersCount - 1)
				{
					$value[] = XQL_Operator::create()->and_();
				}

				$counter++;
			} // foreach

			$result->set($value);
		} // if

		return $result;
	}

	/**
	 * A kapott felsorolásból mezőfelsoroláshoz használható tömböt készít.
	 *
	 * @param array $filters
	 * @param string $connectionAlias
	 * @return array
	 */
	public static function argumentToFields($filters, $connectionAlias='default')
	{
		$result = array();
		foreach ($filters as $fieldName)
		{
			$result[] = XQL_Field::create()->set($fieldName);
		} // foreach
		return $result;
	}

	/**
	 * A kapott asszociatív tömböt mezőnév alapján az INSERT INTO mezőfelsorolásává alakítja.
	 *
	 * @param array $filters
	 * @param string $connectionAlias
	 * @return XQL_InsertCols
	 */
	public static function argumentToInsertCols($filters, $connectionAlias='default')
	{
		$result = new XQL_InsertCols();
		if (count($filters) > 0)
		{
			$value = array();
			foreach ($filters as $k=>$v)
			{
				$value[] = XQL_Field::create()->set($k);
			} // foreach

			$result->set($value);
		} // if

		return $result;
	}

	/**
	 * A kapott asszociatív tömböt érték alapján az INSERT INTO értékfelsorolásává alakítja.
	 *
	 * @param array $filters
	 * @param string $connectionAlias
	 * @return XQL_Values
	 */
	public static function argumentToInsertValues($filters, $connectionAlias='default')
	{
		$result = new XQL_Values();
		if (count($filters) > 0)
		{
			$value = array();
			foreach ($filters as $k=>$v)
			{
				$value[] = XQL_String::create()->set($v);
			} // foreach

			$result->set($value);
		} // if

		return $result;
	}

	/**
	 * A kapott asszociatív tömböt mezőnév és érték alapján az UPDATE értékadó-felsorolásává alakítja.
	 *
	 * @param array $filters
	 * @param string $connectionAlias
	 * @return XQL_Set
	 */
	public static function argumentToUpdateSet($filters, $connectionAlias='default')
	{
		$result = new XQL_Set();
		if (count($filters) > 0)
		{
			$value = array();
			foreach ($filters as $k=>$v)
			{
				$value[] = XQL_Expression::create()->setBrackets(FALSE)->set(
					XQL_Field::create()->set($k),
					XQL_Operator::create()->equals(
						XQL_String::create()->set($v)
					)
				);
			} // foreach

			$result->set($value);
		} // if

		return $result;
	}

	/**
	 * A kapott asszociatív tömböt mezőnév és érték alapján `mezőnév`='érték'
	 * felsorolásként adja vissza.
	 *
	 * @param array $filters
	 * @param string $connectionAlias
	 * @return XQL_Expression
	 */
	public static function argumentToAssociationList($filters, $connectionAlias='default')
	{
		$conn = XQL_Manager::getConnection($connectionAlias);

		$result = XQL_Enumerator::create();
		if (count($filters) > 0)
		{
			$value = array();
			foreach ($filters as $k=>$v)
			{
				$value[] = XQL_Expression::create()->setBrackets(FALSE)->set(
					XQL_Field::create()->set($k),
					XQL_Operator::create()->equals(
						XQL_String::create()->set($v)
					)
				);
			} // foreach

			$result->set($value);
		} // if

		return $result;
	}

	/**
	 * A kapott tömböt az érték alapján felsorolásként adja vissza.
	 *
	 * @param array $filters
	 * @param string $connectionAlias
	 * @return XQL_Expression
	 */
	public static function argumentToValueList($filters, $connectionAlias='default')
	{
		$conn = XQL_Manager::getConnection($connectionAlias);

		$result = XQL_Enumerator::create();
		if (count($filters) > 0)
		{
			$value = array();
			foreach ($filters as $k=>$v)
			{
				$value[] = XQL_String::create()->set($v);
			} // foreach

			$result->set($value);
		} // if

		return $result;
	}

	/**
	 * A kiválasztott (vagy az első) mező értékeiből egyszerű értékfelsoroló
	 * listát készít.
	 *
	 * @param array $resultSet A lekérésből visszatérő eredménytömb
	 * @param string $on A kiválasztott mező neve. Ha nincs megadva, az első mező lesz az.
	 * @return array
	 */
	public static function resultToList($resultSet, $on='')
	{
		$result = array();

		if (is_array($resultSet) and count($resultSet) > 0)
		{
			if (empty($on))
			{
				$on = key($resultSet[0]);
			}

			foreach ($resultSet as $record)
			{
				$result[] = $record[$on];
			}
		}

		return $result;
	}
}

?>